// axiox拦截器实现文件
import axios from 'axios'
import {
	ElMessage
} from 'element-plus'
import router from '../router'

// 创建axios实例
const service = axios.create({
	baseURL: "http://localhost:8080", // 从环境变量获取基础API地址
	timeout: 10000 // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		let token = localStorage.getItem("token")
		// 如果token存在，添加到请求头
		if (token) {
			config.headers['Authorization'] = `Bearer ${token}`
		}
		// 可以根据需要添加其他请求头
		config.headers['Content-Type'] = 'application/json;charset=UTF-8'
		return config
	},
	(error) => {
		// 请求错误处理
		console.log(error)
	}
)

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		const res = response.data

		// 根据后端接口约定处理响应
		if (res.code !== 200) {
			// 处理业务逻辑错误
			ElMessage({
				message: res.message || 'Error',
				type: 'error',
				duration: 5 * 1000
			})

			// 特殊错误码处理
			if (res.code === 401 || res.code === 403) {
				// 未认证或权限不足，跳转到登录页
				router.push('/login')
			}

			return Promise.reject(new Error(res.message || 'Error'))
		} else {
			// 请求成功，直接返回数据部分
			return res.data
		}
	},
	(error) => {
		// HTTP状态码错误处理
		let message = error.message

		if (error.response) {
			switch (error.response.status) {
				case 400:
					message = '请求错误'
					break
				case 401:
					message = '未授权，请重新登录'
					// 清除token并跳转到登录页
					const userStore = useUserStore()
					userStore.logout()
					router.push('/login')
					break
				case 403:
					message = '拒绝访问'
					break
				case 404:
					message = '请求地址出错'
					break
				case 408:
					message = '请求超时'
					break
				case 500:
					message = '服务器内部错误'
					break
				case 501:
					message = '服务未实现'
					break
				case 502:
					message = '网关错误'
					break
				case 503:
					message = '服务不可用'
					break
				case 504:
					message = '网关超时'
					break
				case 505:
					message = 'HTTP版本不受支持'
					break
				default:
					message = '网络错误'
			}
		}

		ElMessage({
			message,
			type: 'error',
			duration: 5 * 1000
		})

		return Promise.reject(error)
	}
)

export default service